package com.yupi.yurpc.serializer;

import java.io.IOException;

/**
 * @author spring
 * 序列化器
 * 服务在本地注册后，我们就可以根据请求信息取出实现类并调用方法了。1824361826056454146_0.6275117188692958
 * 但是在编写处理请求的逻辑前，我们要先实现序列化器模块。因为无论是请求或响应，都会涉及参数的传输。
 * 而 Java 对象是存活在 JVM 虚拟机中的，如果想在其他位置存储并访问、或者在网络中进行传输，就需要进行序列化和反序列化。
 * 什么是序列化和反序列化呢？]
 * 序列化：将 Java 对象转为可传输的字节数组。
 * 反序列化：将字节数组转换为 Java 对象。
 * 1824361826056454146_0.2693794691927691
 * 有很多种不同的序列化方式，比如 Java 原生序列化、JSON、Hessian、Kryo、protobuf 等。
 * 为了实现方便，此处选择 Java 原生的序列化器。
 * 1）在 RPC 模块中编写序列化接口 Serializer，提供序列化和反序列化两个方法，便于后续扩展更多的序列化器。
 */
/*
序列化接口
 */
public interface Serializer {

    /**
     * 序列化
     * @param object 对象
     * @return 序列化成为字节数组
     * @param <T> 泛型
     * @throws IOException 抛出异常
     */
    <T> byte[] serializer(T object) throws IOException;

    /**
     * 反序列化
     * @param bytes 字节数组
     * @param type 类型
     * @return 返回对象
     * @param <T> 泛型
     * @throws IOException 抛出异常
     */
    <T> T deserializer(byte[] bytes,Class<T> type) throws IOException;
}
